// 导入db模块
const db = require('../db/index')
// 导入multiparty中间件来解析图片文件
const multiparty = require('multiparty')

// 发布墙处理函数
// 必需参数有：timer发布时间，message发布内容，num_types数字类型，cha_types文字类型，uuId
exports.publish = (req, res) => {
  // 先查询用户是否在一小时内发布过
  const selectSql = 'select * from wall_walls where uuId=? and timer >NOW()-INTERVAL 1 HOUR'
  db.query(selectSql, req.user.id, (err, result) => {
    // console.log(result, '查询结果');
    if (err) return res.cc(err)
    if (result.length !== 0) return res.cc('你在一小时内，已经发布过一次了哦，等一等吧')
    // 等于0说明用户可以发布文章
    // 整理参数
    req.body.uuId = req.user.id  //获取bodyParser中间件解析的数据
    // 需要判断是否有inform通知这个字段 先插入后判断 定义插入语句
    const sql = 'insert into wall_walls set?'
    db.query(sql, req.body, (err, result) => {
      // 插入失败
      if (err) return res.cc(err)
      // 影响行数不等于1
      if (result.affectedRows !== 1) return res.cc('发布失败,请稍后重试')
      res.send({
        code: 200,
        message: '发布成功，可前往我的发布查看',
      })
    })
  })
}
// 处理发布墙图片上传文件的回调函数
exports.handleformData = (req, res) => {
  // 查询用户最近(新)发布的文章
  const selectSql = 'select * from wall_walls where uuId=? order by timer desc'
  db.query(selectSql, req.user.id, (err, result) => {
    if (err) return res.cc(err)
    let form = new multiparty.Form();
    form.uploadDir = 'public/images' //图片存放地址
    let pic_walls = '' //用来改变数据库图片的数据
    // 解析
    form.parse(req, (err, fields, files) => {
      if (err) res.cc('发布上传图片失败，请稍后重试')
      let serveUrl = 'http://127.0.0.1:8889' //声明一个服务器地址
      // 循环files
      files.file.forEach((item, index) => {
        // 判断是否需要 + ___ ：用于前端将其转化成数组
        if (index === 0) {
          pic_walls += serveUrl + item.path.replace(/\\/g, '/').replace(RegExp('public'), '')
        } else {
          pic_walls += '___' + serveUrl + item.path.replace(/\\/g, '/').replace(RegExp('public'), '')
        }
      })
      //  修改最新一篇文章的图片数据
      const updateSql = 'update wall_walls set pic_walls=? where id=?'
      db.query(updateSql, [pic_walls, result[0].id], (err, result) => {
        if (err) res.cc('发布更改图片失败，请稍后重试')
        if (result.affectedRows !== 1) return res.cc('更改图片失败，请稍后重试')
        res.send({
          code: 200,
          message: '发布成功，可前往我的发布查看',
        })
      })
    })
  })
}
// 查看我的发布回调
exports.mypublish = (req, res) => {
  // 定义查询语句 通过timer字段降序
  const sql = 'select * from wall_walls where uuId=? order by timer desc LIMIT ?,5'
  db.query(sql, [req.user.id, req.params.num * 1], (err, result) => {
    if (err) return res.cc(err)
    if (result.length === 0) return res.cc('你还没有发布墙哦，快去发布吧')
    if (result.length > 0) {
      res.send({
        code: 200,
        message: '查询成功',
        data: result
      })
    }
  })
}
//查看我的喜欢的处理函数
exports.mycollect = (req, res) => {
  // 定义查询语句 通过timer字段降序
  const sql = 'select * from wall_collect where myId=? order by timer desc LIMIT ?,5'
  db.query(sql, [req.user.id, req.params.num * 1], (err, result) => {
    if (err) return res.cc(err)
    if (result.length === 0) return res.cc('没有数据了哦,快去加入吧')
    if (result.length > 0) {
      res.send({
        code: 200,
        message: '查询成功',
        data: result
      })
    }
  })
}
// 获取热门搜索榜处理函数
exports.gethintlist = (req, res) => {
  // 定义查询列表 通过count字段获取前十榜单
  const sql = 'select * from wall_search order by count * 1 desc LIMIT 10'
  db.query(sql, (err, result) => {
    if (err) return res.cc(err)
    res.send({
      code: 200,
      message: '查询成功',
      data: result
    })
  })
}
//搜索内容查询处理函数
exports.getsearchBykeyword = (req, res) => {
  // 将要传给前端的数组
  let resdata = {}
  //控制是否是有效搜索
  let isInsert = false
  // 将到插入到搜索表的值
  let insertData = { keyword: req.params.keyword }
  // 首先，需要判断keyword关键字是数字还是字符
  let type = req.params.keyword * 1  //isNaN()会包含NaN ,isFinite()会排除NaN和Infinity
  if (isFinite(type)) { //说明keyword是数字
    // 去查询用户id，
    const userSql = 'select * from wall_personal where uuId=? LIMIT 10'
    db.query(userSql, req.params.keyword, (err, result) => {
      if (err) return res.cc(err)
      resdata.user = result //将返回值添加到将要返回给前端的数组中
      // 判断是否需要插入，也就是有效搜索
      if (result.length !== 0) isInsert = true
      // 再查询文章id
      const wallsSql = 'select * from wall_walls where id=? LIMIT 10'
      db.query(wallsSql, req.params.keyword, (err, result) => {
        if (err) return res.cc(err)
        resdata.walls = result
        if (result.length !== 0) isInsert = true
        // 再判断是否需要插入
        if (isInsert) {
          //定义查询 //如果已经有了关键字，只需要count字段 +1就好 没有则插入
          const selectSql = 'select * from wall_search where keyword=?'
          db.query(selectSql, req.params.keyword, (err, result) => {
            if (err) return res.cc(err)
            //没有值，则去插入
            if (result.length === 0) {
              // 定义插入语句
              const insertSql = 'insert into wall_search set?'
              db.query(insertSql, insertData, (err, result) => {
                if (err) return res.cc(err)
                if (result.affectedRows !== 1) return res.cc('搜索词统计失败')
                res.send({
                  code: 200,
                  message: '搜索成功结果',
                  data: resdata
                })
              })
            }
            // 有值，则更改
            if (result.length === 1) {
              // 定义更改语句
              const updateSql = 'update wall_search set count=count+1 where id=?'
              db.query(updateSql, result[0].id, (err, result) => {
                if (err) return res.cc(err)
                if (result.affectedRows !== 1) return res.cc('搜索词统计失败')
                res.send({
                  code: 200,
                  message: '搜索成功结果',
                  data: resdata
                })
              })
            }
            if (result.length > 1) return res.cc('搜索统计错误')
          })
        } else {
          res.send({
            code: 200,
            message: '搜索成功结果',
            data: resdata
          })
        }
      })
    })
  } else {
    // 查询用户昵称，查询包含keyword SELECT * FROM dim_customer WHERE name LIKE '%大%'；
    const userSql = 'select * from wall_personal where nickname like ? LIMIT 10'
    let strSql = `%${req.params.keyword}%`
    db.query(userSql, strSql, (err, result) => {
      if (err) return res.cc(err)
      resdata.user = result
      if (result.length !== 0) isInsert = true
      // 再查询文章message 查询文章墙message字段包含keyword关键字 concat(IFNULL(id,'')
      //查询多个字段  SELECT * FROM t_admin  t WHERE (t.`name` LIKE '%林%'  OR t.address LIKE '%林%' OR t.remark LIKE '%林%' ) ;
      const wallsSql = 'select * from wall_walls where (message like ? or by_name like ?) LIMIT 10'
      db.query(wallsSql, [strSql, strSql], (err, result) => {
        if (err) return res.cc(err)
        resdata.walls = result
        if (result.length !== 0) isInsert = true
        // 再判断是否需要插入
        if (isInsert) {
          //定义查询 //如果已经有了关键字，只需要count字段 +1就好 没有则插入
          const selectSql = 'select * from wall_search where keyword=?'
          db.query(selectSql, req.params.keyword, (err, result) => {
            if (err) return res.cc(err)
            //没有值，则去插入
            if (result.length === 0) {
              // 定义插入语句
              const insertSql = 'insert into wall_search set?'
              db.query(insertSql, insertData, (err, result) => {
                if (err) return res.cc(err)
                if (result.affectedRows !== 1) return res.cc('搜索词统计失败')
                res.send({
                  code: 200,
                  message: '搜索成功结果',
                  data: resdata
                })
              })
            }
            // 有值，则更改
            if (result.length === 1) {
              // 定义更改语句
              const updateSql = 'update wall_search set count=count+1 where id=?'
              db.query(updateSql, result[0].id, (err, result) => {
                if (err) return res.cc(err)
                if (result.affectedRows !== 1) return res.cc('搜索词统计失败')
                res.send({
                  code: 200,
                  message: '搜索成功结果',
                  data: resdata
                })
              })
            }
            if (result.length > 1) return res.cc('搜索统计错误')
          })
        } else {
          res.send({
            code: 200,
            message: '搜索成功结果',
            data: resdata
          })
        }
      })
    })
  }
}
// 查询通知用户处理函数
exports.getinformuser = (req, res) => {
  // 定义查询语句 
  const sql = 'select * from wall_personal where nickname=?'
  db.query(sql, req.params.inform, (err, result) => {
    if (err) return res.cc(err)
    if (result.length === 0) return res.cc('没有查询到用户')
    if (result.length === 1) {
      res.send({
        code: 200,
        message: '查询成功',
        data: result[0]
      })
    }
  })
}
// 访问我的发布处理函数
exports.visitmypublish = (req, res) => {
  // 定义查询语句 通过timer字段降序
  const sql = 'select * from wall_walls where uuId=? order by timer desc LIMIT ?,5'
  db.query(sql, [req.params.uuId, req.params.num * 1], (err, result) => {
    if (err) return res.cc(err)
    if (result.length === 0) return res.cc('没有数据了哦,快去发布吧')
    if (result.length > 0) {
      res.send({
        code: 200,
        message: '查询成功',
        data: result
      })
    }
  })
}
// 访问我的喜欢处理函数
exports.visitmycollect = (req, res) => {
  // 定义查询语句 通过timer字段降序
  const sql = 'select * from wall_collect where myId=? order by timer desc LIMIT ?,5'
  db.query(sql, [req.params.uuId, req.params.num * 1], (err, result) => {
    if (err) return res.cc(err)
    if (result.length === 0) return res.cc('没有数据了哦,快去加入吧')
    if (result.length > 0) {
      res.send({
        code: 200,
        message: '查询成功',
        data: result
      })
    }
  })
}
